<?php

namespace Admin\Model;

use Think\Model;
/**
 * 管理员模型
 */
class AdminModel extends Model {
    //在管理员新增之前整理数据
    public function _before_insert(&$data, $options) {
        $data['account']=I('post.account');
        if(I('post.password')==I('post.repassword')){
             $data['password']=  md5(I('post.password').C('MD5_KEY'));
        }else{
            $this->error="两次密码不一致";
        }
        $status=I('post.status');
        if($status=='on'){
            $data['status']=1;
        }else{
            $data['status']=0;
        }
        $data['login_count']=0;
        $data['create_time']=time();
        $data['login_ip']=get_client_ip();
        $data['face']=I('post.face');
    }
    //在管理员新增之后将新增的管理员id和Post提交的group数组插入到auth_group_access中
    public function _after_insert($data, $options) {
        $group=I('group');//获取选择的角色
        if($group){
            $agaModel=M('AuthGroupAccess');//生成管理员和用户组表的模型
            //循环角色数组(里面可能包含有N个角色的id)
            foreach ($group as $key => $value) {
                //循环将新增后的管理员id和角色id添加到AuthGroupAccess表中
                $agaModel->add(array(
                    'uid'=>$data['id'],
                    'group_id'=>$value,
                ));
            }
        }
    }

    //在管理员信息被修改之前
    public function _before_update(&$data, $options) {
        //整理数据
        $data['id'] = I('post.id');
        $data['account'] = I('post.account');
        if (I('post.password') == I('post.repassword')) {
            $data['password'] = md5(I('post.password') . C('MD5_KEY'));
        } else {
            $this->error="两次密码不一致";
        }
        $status=I('post.status');
        //超级管理员不显示状态值，以防别人修改，因为超级管理员是不能被禁用的，所以不显示状态值，Post提交过来的数据中就没有status字段，所以在这里加上，而其他管理员都有状态值
        if(empty($status)){
            $data['status']=1;
        }else{
            $data['status']=0;
        }
        if($status=='on'){
            $data['status']=1;
        }else{
            $data['status']=0;
        }
        //获取头像路径
        $face=I('post.face');
        //如果头像路径不为空
        if(!empty($face)){
            $data['face'] =$face;
        }else{
            //头像路径为空则从post数组中删除该值，表示头像不修改
            unset($data['face']);
        }
        //获取密码，判断密码是否为空，如果为空，将密码列从$data数组删除(密码为空表示不修改密码)
        $pwd = $data['password'];
        if (empty($pwd)) {
            unset($data['password']);
        }
        //根据id查找对应的头像路径后再上传目录中将该头像删除
        $info = $this->field('face')->where(array('id' =>I('post.id')))->find();
        if ($info) {
            unlink('./Uploads/' . $info['face']);
        }
        //修改之前根据该管理员id把原来的角色都删除，然后添加新的角色
        $agaModel=M('AuthGroupAccess');
        $agaModel->where(array('uid'=>I('post.id')))->delete();
        //接受界面的角色Id值
        $group=I('group');//获取选择的角色
        if($group){
            $agaModel=M('AuthGroupAccess');//生成管理员和用户组表的模型
            //循环角色数组(里面可能包含有N个角色的id)
            foreach ($group as $key => $value) {
                //循环将新增后的管理员id和角色id添加到AuthGroupAccess表中
                $agaModel->add(array(
                    'uid'=>I('post.id'),
                    'group_id'=>$value,
                ));
            }
        }
    }
    //在管理员信息被删除之前先删除头像文件
    public function _before_delete($options) {
        $id=I('get.id');
        //根据id查找对应的头像路径后再上传目录中将该头像删除
        $info = $this->field('face')->where(array('id' => $id))->find();
        if ($info) {
            unlink('./Uploads/' . $info['face']);
        }
    }

    //分页
    public function pageData() {
        $count = $this->count(); // 查询满足要求的总记录数
        $Page = new \Think\Page($count, C('ListRows')); // 实例化分页类 传入总记录数和每页显示的记录数
        $Page->setConfig('next', '下页');
        $Page->setConfig('prev', '上页');
        $Page->setConfig('first', '首页');
        $Page->setConfig('last', '末页');
        $show = $Page->show(); // 分页显示输出
        // 进行分页数据查询 注意limit方法的参数要使用Page类的属性
        $list = $this->limit($Page->firstRow . ',' . $Page->listRows)->select();
        return array(
            'page'=>$show,
            'list'=>$list,
        );
    }
    //根据管理员id分组查询出对应的角色id
    public function getGroupId($id){
        //根据管理员Id查询出用户组的id，并根据管理员的id分组，但是分组后的数组只显示一条，所以在查询出来的group_id外使用mysql中的GROUP_CONCAT函数
        return M('AuthGroupAccess')->field("GROUP_CONCAT(group_id) as role")->where(array('uid'=>$id))->group('uid')->find();
    }
}
